package com.gk.panda.apis.patrol.servicr;

import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gk.panda.commons.result.Result;
import com.gk.panda.pojo.patrol.dto.*;
import com.gk.panda.pojo.patrol.entity.ReportEntity;
import com.gk.panda.pojo.patrol.request.PageReportRequest;
import com.gk.panda.pojo.patrol.request.SaveReportRequest;
import com.gk.panda.pojo.patrol.request.UpdateReportRequest;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Author：xxz
 * @Create: 2022/11/1 15:56
 */
public interface ReportService extends IService<ReportEntity> {


    /**
     * 分页查询  ---PC
     *
     * @return
     */
    Page<ReportPageDTO> queryPage(PageReportRequest request);

    /**
     * 详情  -----PC
     *
     * @param reportId
     * @return
     */
    ReportDetailDTO detail(Long reportId);


    Result<?> update( UpdateReportRequest request);

    /**
     * 删除事件
     * @param id
     * @return
     */
    Result<?> remove(Long id);

    /**
     * 详情列表-----app
     *
     * @param id
     * @return
     */
    DetailListDTO detailList(Long id);

    /**
     * 新增事件   -----app
     *
     * @param request
     * @return
     */
    Result<?> saveReport(SaveReportRequest request);

    /**
     * 分页查询事件信息  通过巡护id查询事件分页
     *
     * @param patrolId
     * @return
     */
    List<ReportDTO>pageReport(Long patrolId);


    /**
     * 根据 巡护id  获取事件ids
     * @param patrolId
     * @return
     */
    List<Long> getIdsByReport(Long patrolId);



    /**
     *  导出 事件Excel
     * @param response
     */
    void export(HttpServletResponse response, PageReportRequest request);

    /**
     * 求和
     * @param name
     * @param type
     * @param startTime
     * @param endTime
     * @return
     */
    Long countReport(String name, String type, DateTime startTime, DateTime endTime);

    ReportSumDTO countData(PageReportRequest request);

    /**
     * 修改详情
     * @param id
     * @return
     */
    UpdateDetailDTO updateDetail(Long id);

    /**
     * 根据巡护类型和创建人查询路程
     * @param name
     * @param type
     * @return
     */
    Double countRouteSum(String name, String type);
}
